package done.easy_001_100;

import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

/**
 * 28.实现 strStr() 函数。implement strStr()
 * <p>
 * 给定一个 haystack 字符串和一个 needle 字符串，在 haystack 字符串中找出
 * needle 字符串出现的第一个位置 (从0开始)。如果不存在，则返回  -1。
 * <p>
 * 示例 1:
 * <p>
 * 输入: haystack = "hello", needle = "ll"
 * 输出: 2
 * 示例 2:
 * <p>
 * 第一层循环 for (i=0;i<m-n;i++) 遍历长串
 * 第二层循环 for (j=0;j<n;j++)   遍历短串
 * <p>
 * i->
 * hello
 * ll
 * j->
 * <p>
 * <p>
 * i->
 * hello
 * ll
 * j->
 * <p>
 * <p>
 * i->
 * hello
 * ll
 * j->
 * <p>
 * 输入: haystack = "aaaaa", needle = "bba"
 * 输出: -1
 * <p>
 * 这道题让我们在一个字符串中找另一个字符串第一次出现的位置，那我们首先要做一些判断，
 * 如果子字符串为空，则返回0，如果子字符串长度大于母字符串长度，则返回-1。然后我们
 * 开始遍历母字符串，我们并不需要遍历整个母字符串，而是遍历到剩下的长度和子字符串相
 * 等的位置即可，这样可以提高运算效率。然后对于每一个字符，我们都遍历一遍子字符串，
 * 一个一个字符的对应比较，如果对应位置有不等的，则跳出循环，如果一直都没有跳出循环，
 * 则说明子字符串出现了，则返回起始位置即可，
 *
 * @author 大硕
 * 2019-03-23 7:52 AM
 **/
@Slf4j
public class StrStr {

    @SuppressWarnings("all")
    public int strStr(String l1str, String l2str) {
        // 190323 first
        return -1;
    }

    @Test
    public void test() {
        String s1 = "hello";
        String s2 = "ll";
        log.info("result:{}", strStr(s1, s2));
    }

}



























/*
public int strStr(String l1str, String l2str) {
    char[] l1 = l1str.toCharArray();
    char[] l2 = l2str.toCharArray();

    if (l2.length==0) {
        return 0;
    }

    int m = l1.length;
    int n = l2.length;

    if (m < n) return -1;
    for (int i = 0; i <= m - n; i++) {
        int j = 0;
        for (; j < n; j++) {
            if (l1[i + j] != l2[j]) {
                break;
            }
        }
        if (j == n) {
            return i;
        }
    }
    return -1;
}
*/
